************************
*
* DISK ROUTINES 
*
************************
 LST OFF
*
ROW EQU $8CC
COL EQU $8CD
XMAX EQU $9C3 ;XH IN MOVER    
SETRNUM EQU $C00
RNUM EQU $8C9  
RMBUF EQU $2500 ;TEMP 
RANDOM EQU $6600 
ARRAY EQU $10
RNDL EQU $4E
RNDH EQU $4F
WIDTH EQU $EC
OLDKEY EQU $9C0  
SCLR EQU $F3E2  
GETKEY EQU $1034  
ROOMDRAW EQU $5700
WARMSTART EQU $1015
NUMR EQU $7F0
COUNTER EQU $8C5
*
*
*******************************
*  RWTS ROUTINES              *
*******************************
* USE TO BINARY DATA DIRECT
* TO DISK SECTORS
*
*
RWTS EQU $3D9 
TN EQU $31D 
SN EQU $31E 
* TN = TRACK NUMBER
* SN = SECTOR NUMBER
*CMD = COMMAND CODE  01 READ; 02 WRITE
*BUFLO = BUFFER ADDR. LO
*BUFHI = BUFFER ADDR. HI
*
 ORG $320  
IOB DFB01,$60,01,254
SETTN DFB$03
SETSN DFB$03
DCTLO DFB$31 
DCTHI DFB$3 
BUFLO DFB0
BUFHI DFB$60
 DFB0,0 
CMDCODE DFB 01
 DFB00,00,$60,1 
DRIVNO EQU IOB+2
*******************************
*  DEVICE CHAR. TABLE         *
********************************
DCT DFB0,1,$EF,$D8
*******************************
*   CONTROLLER                *
*******************************
CONTR LDA #3 
 LDY #$20 
 JSR RWTS
 RTS
******************************
*
*
READ LDA #1
 STA CMDCODE
 LDA SN
 STA SETSN
 LDA TN 
 STA SETTN
 JSR CONTR 
 RTS
WRITE LDA #2
 STA CMDCODE
 LDA SN
 STA SETSN
 LDA TN
 STA SETTN
 JSR CONTR   
 RTS
************************
************************
* TO READ 4K INTO MEM. * 
************************
* READS IN ONE WHOLE TRACK
* ENTER WITH TRACK NO. IN TN = $320 *
COUNT EQU $31C 
READTRACK LDA #16
 STA COUNT
LOOP1 JSR READ 
 INC SN
 INC BUFHI
 DEC COUNT
 BNE LOOP1
 RTS
***************************
*  WRITE A TRACK          *
***************************
* WRITES 4K INTO TRACK TN *
*************************** 
* ENTER WITH 4K BLOCK ADDR IN BUFHI & BUFLO *
WRITETRACK LDA #16
 STA COUNT
LOOP2 JSR WRITE
 INC SN
 INC BUFHI
 DEC COUNT
 BNE LOOP2
 RTS
******************************
* READ SECTORS SN TO SNFIN TRACK TN INTO MEM.*
**********************************************
SNFIN EQU $31F
READIT JSR READ
 INC SN
 INC BUFHI
 LDA SN
 CMP SNFIN
 BNE READIT
 JSR READ
 RTS
*********************************
* READ IN TWO CONSECTUTIVE TRACKS*
**********************************
READ8K STA TN   ;ENTER W. TN IN ACC
 STX BUFLO ;ENTER W. BUFLO IN X REG
 STY BUFHI ;ENTER W. BUFHI IN Y REG
 LDA #0
 STA SN
 JSR READTRACK
 INC TN
 LDA #0
 STA SN
 JSR READTRACK
 RTS
 LST ON
*******************************
*
 ORG $6900 
***************************
MNSTLOAD JMP MNSTLOAD1
BXFX JMP BXFX1
PLFX JMP PLFX1
TANDBFIX JMP FIXTOPANDBOT
SAVGAM JMP SAVGAM1
LOADGAM JMP LOADGAM1
MAZESET JMP MAZESET1
LOCKBOX JMP LOCKBOX1
PARAMSAVE JMP PARAMSAVE1
OUTGO JMP $6500  
HELPER JMP $5600   
*
*  
MNSTLOAD1 LDA ROW
 CMP #8
 BCS MNLOADOUT
 CLC
 ADC #8
 STA TN
 LDA #0
 STA SN
 STA BUFLO
 LDA #$40
 STA BUFHI
 JSR READTRACK
 LDA ROW
 ASL A
 STA SN
 LDA #$10 
 STA TN
 LDA #0
 STA BUFLO
 LDA #$0E
 STA BUFHI  
 JSR READ
 INC BUFHI
 INC SN
 JSR READ
MNLOADOUT RTS   
* 
*
*
***************************
*
* FLOOR RETREIVER  
*
*****************************
*
*
*
MAZESET1 JSR MAZESET2
BOXER JSR BXFX1 
 BIT XMAX
 BPL BOXER
 JSR LOCKBOX1
 JSR PLFX1
 JSR FIXTOPANDBOT
 RTS
*
*
MAZESET2 JSR ARRANGENUM
 LDA #7
 STA COUNTER
 LDX #0
 STX XMAX
READFLOOR JSR RANDSET  
 CLC
 LDA XMAX
 ADC #8
 STA XMAX
INLUP JSR SET
 INX
 CPX XMAX
 BNE INLUP
 LDA XMAX
 CMP #$40
 BNE READFLOOR
 RTS
*
*
*
SET LDA RMBUF,Y ;MAKE 1 FLOOR FROM RMBUF 
 STA $9200,X 
 INY
 LDA RMBUF,Y
 STA $9240,X
 INY
 LDA RMBUF,Y
 STA $9280,X
 INY
 LDA RMBUF,Y
 STA $92C0,X
 INY
 LDA RMBUF,Y 
 STA $9300,X 
 INY
 LDA RMBUF,Y
 STA $9340,X
 INY
 LDA RMBUF,Y
 STA $9380,X
 INY
 LDA RMBUF,Y
 STA $9400,X
 INY
 LDA RMBUF,Y 
 STA $9440,X 
 INY
 LDA RMBUF,Y
 STA $9480,X
 INY
 LDA RMBUF,Y
 STA $9500,X
 INY
 LDA RMBUF,Y
 STA $9540,X
 INY
 LDA RMBUF,Y 
 STA $9580,X 
 INY
 LDA RMBUF,Y
 STA $9600,X
 INY
 LDA RMBUF,Y
 STA $9640,X
 INY
 LDA RMBUF,Y
 STA $9680,X
 INY
 LDA #0
 STA $9500,X
 RTS
*
*
RANDSET STX WIDTH
 LDX COUNTER
 LDA NUMR,X
 LSR A
 STA SN
 LDA #3
 STA TN
 LDA #0
 STA BUFLO
 LDA #$25 ;TEMP 
 STA BUFHI
 JSR READ
 LDX COUNTER
 DEC COUNTER
 LDA NUMR,X
 LSR A
 BCC TOPHALF
BOTHALF LDY #0
 BEQ OUTSECT
TOPHALF LDY #$80
OUTSECT LDX WIDTH 
 RTS
*
*
FIXTAB DFB 0,3,8,$B,$13,$17,$1B,$1F,$20,$23,$28,$2B,$33,$37,$3F
ORTAB DFB $40,$80,$80,$40,$80,$40,$40,$80,$40,$80,$80,$40,$80,$40,$80 
*
*
**************************
*
* GAME SAVER
*
**************************
*
*
SAVGAM1 LDA #4 
 STA TN
 LDA #0
 STA SN
 STA BUFLO
 LDA #$8
 STA BUFHI
 JSR WRITE
 INC SN
 INC BUFHI
 JSR WRITE
 LDA #$E
 STA BUFHI
 INC SN
 JSR WRITE
 INC SN
 INC BUFHI
 JSR WRITE
 JSR MAZER
 JSR WRITETRACK
 JSR MNSTER
 JSR WRITETRACK
 RTS
*
*
MAZER LDA #$20
 STA TN
 LDA #0
 STA SN
 STA BUFLO
 LDA #$90
 STA BUFHI
 RTS 
*
*
MNSTER LDA #$1B
 STA TN
 LDA #0
 STA SN
 STA BUFLO
 LDA #$40
 STA BUFHI
 RTS
*
*
*
*
*************************
*
* OLD GAME LOADER
*
*************************
*
LOADGAM1 LDA #4 
 STA TN
 LDA #0
 STA SN
 STA BUFLO
 LDA #$8
 STA BUFHI
 JSR READ
 INC SN
 INC BUFHI
 JSR READ
 LDA #$E
 STA BUFHI
 INC SN
 JSR READ
 INC SN
 INC BUFHI
 JSR READ
 JSR MAZER
 JSR READTRACK
 JSR MNSTER
 JSR READTRACK
 RTS
*
*
*
*
*********************
*
* EXIT MAKER
*
*********************
*
FIXTOPANDBOT LDX #0
HIDA LDA FIXTAB,X
 STA FIXT+1
 STA FIXY+1
FIXT LDA $9600 ;CHANGEABLE   
 AND #$3F
 ORA ORTAB,X
FIXY STA $9600 ;CHANGEABLE   
 INX
 CPX #$0F 
 BNE HIDA
 RTS
*
*
*
***************************
*
*  
*
* FIX CONTENTS
*
***********************
*
*
BXFX1 LDA #$93 
BXFXA STA O1+2
 STA S1+2
 STA M1+2
 LDA #0
 STA XMAX ;USED AS A FLAG
 JMP CONTENTS
*
PLFX1 LDA #$94 
 JMP BXFXA 
*
*
CONTENTS LDX #$BF
M1 LDA $9300,X
 BPL EMPT
 JSR RANDOM                                    
 BIT ARRAY 
 BVS EMPT
 LDA ARRAY 
 AND #7
 CMP #7
 BNE ORIT
 CPX #$B8 
 BCS SETMAX
 JSR RANDOM
 LDA ARRAY
 AND #7
 JMP ORIT
SETMAX LDA #$80 
 STA XMAX ;MEANS AT LEAST ONE IDOL
 LDA #7
 JMP ORIT
EMPT LDA #0
ORIT ASL A
 ASL A
 ASL A
O1 ORA $9300,X
S1 STA $9300,X
 DEX
 BNE M1  
 RTS
*
*
LOCKBOX1 LDX #$BF
LOCKLOOP LDA $9300,X 
 BPL NOBOX
 JSR RANDOM            
 AND #$F 
 CMP #4
 BNE NOBOX
 LDA #$40 ;CHECK THIS TO BE SURE
 STA $9400,X ;LOCKS IT
NOBOX DEX
 BPL LOCKLOOP
 RTS
*
*
*
PARAMSAVE1 LDA ROW
 CMP #8
 BCS PAROUT
 ASL A
 STA SN
 LDA #$10
 STA TN
 LDA #0
 STA BUFLO
 LDA #$E
 STA BUFHI
 JSR WRITE
 INC SN
 INC BUFHI
 JSR WRITE
PAROUT RTS 
*
*
***************************
*
* ROOM NUMBER ARRANGER
*
*************************** 
*
*
*
ARRANGENUM LDX #7
 LDA #$FF
STNU1 STA NUMR,X
 DEX 
 BPL STNU1
LODX LDX #7 
GETNUM JSR RANDOM
 AND #$3F 
 LSR A
 STA WIDTH
INL LDA NUMR,X
 CMP WIDTH
 BEQ LODX     
 CMP #$FF
 BNE NEXTARR
 LDA WIDTH
 STA NUMR,X
 CPX #0
 BEQ FINARR
 JMP LODX
NEXTARR DEX
 BPL INL    
FINARR RTS
*
*
